import { menus } from "@/router/routes";

export default {
  isLogin(state) {
    return !!(state.userInfo.adminname && state.userInfo.role && state.userInfo.token && state.userInfo.checkedkeys);
  },
  // 权限菜单  =>每个用户都有对应的权限列表  =>  访问的菜单只能是权限列表中的  => 没有权限的菜单不能显示
  authorityMenus(state, getters) {

    // menus  => 所有菜单 
    // state.userInfo.role    => 角色等级
    // state.userInfo.checkedkeys  => 权限菜单列表

    // 目的: 对应权限菜单列表 -> 生成新菜单

    let Menus = JSON.parse(JSON.stringify(menus)); // 深拷贝 =>  不影响原本的菜单

    if (getters.isLogin) {  // 用户已经登录
      let { role, checkedkeys } = state.userInfo;

      let list = []; // 用于存储用户可以访问的权限菜单 => 用于存储一级的
      // adminname == 'admin'
      if (role == 1) { //如果是超级管理员,直接返回所有的菜单-> 默认的admin没有checkedkeys
        return Menus;
      } else { // 不是超级管理员,对应权限列表生成

        Menus.forEach(item => {  // 所有的一级菜单

          // 权限列表中包含对应的一级菜单
          // 1. 只有一级,没有二级
          // 2. 有二级,但是所有的二级也被选中
          // 小结: 都可以访问 -> 直接放到list中
          if (checkedkeys.includes(item.path)) {
            list.push(item);

          } else {
            // 权限列表中没有对应的一级菜单
            // 1. 只能访问二级菜单中的某一个/多个  /pro/list
            // 2. 所有的二级菜单均不能访问    /admin

            var children = item.children; // 一级菜单 下的 二级菜单
            if (children) {
              var subList = []; // 存储所有可以访问的二级菜单
              children.forEach(subItem => { // 二级菜单中的每一个
                if (checkedkeys.includes(subItem.path)) {
                  subList.push(subItem)
                }
              })

              if (subList.length > 0) {  // 能访问二级菜单中的某一个/多个
                item.children = subList;
                list.push(item);
              }

            }
          }
        })
        return list;
      }


    } else {  // 用户未登录  => []
      return [];
    }


  }
}